/*
 * Authors: Filipe Ferraz Salgado  (filipesalgado@hotmail.com)
 *          Alexandre Albano       (aalbano@gmail.com)
 *          Instituto de Matemática e Estatística
 *          Universidade de São Paulo
 */

package br.org.groupware_workbench.commonalgorithms.analisadortextual_1_1.com.alag.ci.textanalysis.lucene.impl;

import java.io.Reader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.br.BrazilianAnalyzer;
import org.apache.lucene.analysis.br.BrazilianStemFilter;
import org.apache.lucene.analysis.standard.StandardTokenizer;

import br.org.groupware_workbench.commonalgorithms.analisadortextual_1_1.AnalisadorTextual;

public class BrazilianStemStopWordAnalyzer extends Analyzer {
	// a, ainda, alem, ambas, ambos, antes, ao, aonde, aos, apos, aquele, aqueles, as, 
	// assim, com, como, contra, contudo, cuja, cujas, cujo, cujos, da, das, de, dela, 
	// dele, deles, demais, depois, desde, desta, deste, dispoe, dispoem, diversa, 
	// diversas, diversos, do, dos, durante, e, ela, elas, ele, eles, em, entao, entre, 
	// essa, essas, esse, esses, esta, estas, este, estes, ha, isso, isto, logo, mais, 
	// mas, mediante, menos, mesma, mesmas, mesmo, mesmos, na, nas, nao, nas, nem, nesse, 
	// neste, nos, o, os, ou, outra, outras, outro, outros, pelas, pelas, pelo, pelos, 
	// perante, pois, por, porque, portanto, proprio, propios, quais, qual, qualquer, 
	// quando, quanto, que, quem, quer, se, seja, sem, sendo, seu, seus, sob, sobre, sua, 
	// suas, tal, tambem, teu, teus, toda, todas, todo, todos, tua, tuas, tudo, um, uma, 
	// umas, uns 
	//public static final String [] stopWords = BrazilianAnalyzer.BRAZILIAN_STOP_WORDS;
	private String[] stopWords;

	public TokenStream tokenStream(String fieldName, Reader reader) {
		Tokenizer tokenizer = new StandardTokenizer(reader);
		TokenFilter lowerCaseFilter = new LowerCaseFilter(tokenizer);
		TokenFilter stopFilter = new StopFilter(lowerCaseFilter,stopWords);
		TokenFilter stemFilter =  new BrazilianStemFilter(stopFilter);
		return stemFilter;
	}
	
	public BrazilianStemStopWordAnalyzer(String[] stopWords) {
		this.stopWords = stopWords;
	}

}
